package cn.minhx.dtm.starter.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 分布式事务配置属性
 *
 * @author min
 */
@ConfigurationProperties(prefix = "dtm")
@Data
public class DistributedTransactionProperties {

	/** 是否启用分布式事务 */
	private boolean enabled = true;

	/** 事务重试配置 */
	private RetryConfig retry = new RetryConfig();

	/** 线程池配置 */
	private ThreadPoolProperties threadPool = new ThreadPoolProperties();

	/**
	 * 事务重试配置
	 *
	 * @author min
	 */
	@Data
	public static class RetryConfig {
		/** 是否启用重试任务（默认开启） 在分布式部署环境中，建议只在一个实例上启用，避免重复执行 */
		private boolean enabled = true;

		/** 扫描任务执行间隔（毫秒） */
		private long scanInterval = 30000;

		/** 每次扫描的任务数量上限 */
		private int batchSize = 100;
	}

	/**
	 * 线程池配置属性
	 *
	 * @author min
	 */
	@Data
	public static class ThreadPoolProperties {
		/** 核心线程数 */
		private int corePoolSize = 5;

		/** 最大线程数 */
		private int maxPoolSize = 10;

		/** 空闲线程存活时间（秒） */
		private int keepAliveTime = 60;

		/** 队列容量 */
		private int queueCapacity = 100;

		/** 线程名称前缀 */
		private String threadNamePrefix = "dtm-pool-";
	}
}
